#include <cstring>
#include <iostream>
#include <algorithm>
#include <sstream>

using namespace std;

const int N = 510;

int n, m;
int dist[N];
bool g[N][N];
int stop[N];
int q[N];

void bfs() {
    memset(dist, 0x3f, sizeof dist);
    int hh = 0, tt = 0;
    q[0] = 1, dist[1]= 0;
    
    while (hh <= tt) {
        int t = q[hh ++ ];
        
        for (int i = 1; i <= n; ++ i)
            if (g[t][i] && dist[i] > dist[t] + 1) {
                dist[i] = dist[t] + 1;
                q[ ++ tt] = i;
            }
    }
}

int main() {
    cin >> m >> n;
    
    string line;
    getchar();
    
    while (m -- ) {
        getline(cin, line);
        stringstream ssin(line);
        int cnt = 0, p;
        while (ssin >> p) stop[cnt ++ ] = p;
        for (int i = 0; i < cnt; ++ i)
            for (int j = i + 1; j < cnt; ++ j)
                g[stop[i]][stop[j]] = true;
    }
    
    bfs();
    
    if (dist[n] == 0x3f3f3f3f) puts("NO");
    else printf("%d\n", max(dist[n] - 1, 0));
    
    return 0;
}